﻿////改进算法: 三路划分
//#include <stdio.h>
//void Swap(int* x, int* y) {
//	int t = *x;
//	*x = *y;
//	*y = t;
//}
//void Separate(int* nums, int n, int l, int r, int c) {
//	int key = nums[0];
//	while (r < c) {
//		if (key > nums[r]) {
//			Swap(nums + l, nums + r);
//			l++;
//		}
//		if (key < nums[r]) {
//			Swap(nums + c, nums + r);
//			c--;
//			continue;
//		}
//		r++;
//	}
//}
//int main() {
//	int nums[] = { 6,1,6,6,8,6,6,4,6,3 };
//	//测试样例
//	Separate(nums, sizeof(nums) / sizeof(int), 0, 1, sizeof(nums) / sizeof(int) - 1);
//	for (int i = 0; i < sizeof(nums) / sizeof(int); i++) {
//		fprintf(stdout, "%d ", nums[i]);
//	}
//	return 0;
//}

//#include <iostream>
////直接展开cout和endl的使用，不用在用域的限定符"::"
//using std::cout;
//using std::endl;
////定义自己的命名空间
//namespace bit
//{
//	namespace bit1
//	{
//		int rand = 1;
//	}
//	namespace bit2
//	{
//		int rand = 2;
//	}
//	int Add(int left, int right)
//	{
//		return left + right;
//	}
//	struct Node
//	{
//		struct Node* next;
//		int val;
//	};
//}
////函数定义和声明中不能同时给默认参数，因为编译器无法确定用哪个默认值
////通常，函数的声明和定义中的默认参数按照声明来决定(也不完全是这样，特殊情况下是不同的)
////因此，不能只在定义中给默认参数
////因为当运用时是按照函数的声明来的，最好只在声明中给默认参数
//void fund(int a) {
//	cout << a << endl;
//}
//void fund(int a = 5);
//int main() {
//	//:: 域作用限定符
//	printf("%d\n", bit::bit1::rand);
//	cout << bit::bit1::rand << endl;
//	fund();
//	return 0;
//}